import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.ListModel;

/**
 * 
 * @author Francisco Vallejo
 * 
 */
public class MyListenerBotones implements ActionListener {
	private Metodo metod = new Metodo();
	private VentanaPrincipal ventana;

	public MyListenerBotones(VentanaPrincipal ventana) {
		this.ventana = ventana;
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		JButton botonAux = (JButton) arg0.getSource();
		// BUSCAR
		if (botonAux.getText().equalsIgnoreCase("Buscar")) {
			ventana.getTexto7().setForeground(null);
			String dniAux = ventana.getTexto1().getText();
			if (comprobarDni()) {
				Alumno alumnoEncontrado = metod.buscarAlumno(dniAux);
				if (alumnoEncontrado != null)
					mostrarAlumno(ventana.getTexto7(),
							ventana.getModeloLista(), alumnoEncontrado);
				else {
					ventana.getTexto7().setForeground(Color.red);
					ventana.getTexto7()
							.setText(
									"Alumno no Encontrado");
				}
				// INSERTAR
			}
		} else if (botonAux.getText().equalsIgnoreCase("Insertar")) {
			ventana.getTexto7().setForeground(null);
			String dniAux = ventana.getTexto1().getText();
			if (comprobarDni()) {
				String nombre = ventana.getTexto2().getText();
				String poblacion = ventana.getTexto3().getText();
				String tel = ventana.getTexto4().getText();
				int telefono = 0;
				try {
					telefono = Integer.parseInt(tel);
				} catch (NumberFormatException e) {
					ventana.getTexto7().setForeground(Color.red);
					ventana.getTexto7().setText("Mal Formato de Telefono");
				}
				String fecha = ventana.getTexto5().getText();
				String carrera = ventana.getCombito().getSelectedItem()
						.toString();
				Alumno alumnoAuxiliar = null;
				if (!nombre.equalsIgnoreCase("")
						&& !poblacion.equalsIgnoreCase("") && telefono != 0
						&& !fecha.equalsIgnoreCase("")) {
					alumnoAuxiliar = metod.insertarAlumno(dniAux, nombre,
							poblacion, telefono, fecha, carrera,
							ventana.getTextAreaInferior());
					if (alumnoAuxiliar != null) {
						ventana.getModeloLista().clear();
						ArrayList<Alumno> alumnosPorCarrera = new ArrayList<Alumno>();
						alumnosPorCarrera = metod
								.mostrarAlumnosPorCarrera(carrera);
						for (int i = 0; i < alumnosPorCarrera.size(); i++) {
							ventana.getTexto7().setText("");
							Alumno auxAlumno = alumnosPorCarrera.get(i);
							mostrarAlumnosPorCarrera(ventana.getModeloLista(),
									auxAlumno);
						}
					} else {
						ventana.getTexto7().setForeground(Color.red);
						ventana.getTexto7()
								.setText(
										"Alumno no insertado");
					}
				} else {
					ventana.getTexto7().setForeground(Color.red);
					ventana.getTexto7()
							.setText(
									"Inserte todos los datos correctamente por Favor");
				}
				// MODIFICAR
			}
		} else if (botonAux.getText().equalsIgnoreCase("Modificar")) {
			ventana.getTexto7().setForeground(null);
			String dniAux = ventana.getTexto1().getText();
			if (comprobarDni()) {
				String nombre = ventana.getTexto2().getText();
				String poblacion = ventana.getTexto3().getText();
				String tel = ventana.getTexto4().getText();
				int telefono = 0;
				try {
					telefono = Integer.parseInt(tel);
				} catch (NumberFormatException e) {
					ventana.getTexto7().setForeground(Color.red);
					ventana.getTexto7().setText("Mal Formato de Telefono");
				}
				String fecha = ventana.getTexto5().getText();
				String carrera = ventana.getCombito().getSelectedItem()
						.toString();
				Alumno aux = null;
				if (!nombre.equalsIgnoreCase("")
						&& !poblacion.equalsIgnoreCase("") && telefono != 0
						&& !fecha.equalsIgnoreCase("")) {
					aux = metod.modificarAlumno(dniAux, nombre, poblacion,
							telefono, fecha, carrera);
					if (aux != null) {
						mostrarAlumno(ventana.getTexto7(),
								ventana.getModeloLista(), aux);
					} else {
						ventana.getTexto7().setForeground(Color.red);
						ventana.getTexto7()
								.setText(
										"Alumno no encontrado, Inserte Correctamente el dni");
					}
				} else {
					ventana.getTexto7().setForeground(Color.red);
					ventana.getTexto7()
							.setText(
									"Inserte todos los datos correctamente por Favor Nubu");
				}

				// ELIMINAR
			}
		} else if (botonAux.getText().equalsIgnoreCase("Eliminar")) {
			ventana.getTexto7().setForeground(null);
			String dniAux = ventana.getTexto1().getText();
			if (comprobarDni()) {
				boolean borrado = metod.eliminarAlumno(dniAux);
				if (borrado) {
					ventana.getTexto7().setText(
							"Alumno Borrado correctamente por vago =O");
				} else {
					ventana.getTexto7().setForeground(Color.red);
					ventana.getTexto7()
							.setText(
									"Accion imposible de realizar, revise el Dni por Favor");
				}
			}
		}
		// else if (botonAux.getText().equalsIgnoreCase("Ver Alumnos")) {
		// ventana.getTextAreaInferior().setText("");
		// String carrera =
		// ventana.getComboInferior().getSelectedItem().toString();
		// ArrayList<Alumno> alumnosPorCarrera = new ArrayList<Alumno>();
		// alumnosPorCarrera = metod.mostrarAlumnosPorCarrera(carrera);
		// ventana.getModeloLista().clear();
		// if (alumnosPorCarrera.size() == 0) {
		// ventana.getTexto7().setText("No hay alumnos en esa carrera");
		// } else {
		// for (int i = 0; i < alumnosPorCarrera.size(); i++) {
		// ventana.getTexto7().setText("");
		// Alumno auxAlumno = alumnosPorCarrera.get(i);
		// mostrarAlumnosPorCarrera(ventana.getModeloLista(),
		// auxAlumno);
		// }
		// }
		//
		// }
		// LIMPIAR
		else if (botonAux.getText().equalsIgnoreCase("Limpiar")) {
			ventana.getTexto1().setText("");
			ventana.getTexto2().setText("");
			ventana.getTexto3().setText("");
			ventana.getTexto4().setText("");
			ventana.getTexto5().setText("");
			ventana.getTexto7().setText("");
			ventana.getModeloLista().clear();

		} else if (botonAux.getText().equalsIgnoreCase("Salir")) {
			salir();
		}
	}
	public void salir(){
		metod.salir();
	}

	/**
	 * Metodo para mostrar un alumno en la pantalla inferior
	 * 
	 * @param textAreaInferior
	 *            pantalla donde se escribiran los datos del alumno
	 * @param alumno
	 *            alumno el cual se mostrara por pantalla
	 */
	public void mostrarAlumno(JLabel label, DefaultListModel modeloLista,
			Alumno alumno) {
		if (alumno != null) {
			modeloLista.clear();
			modeloLista.addElement(alumno);
		}
		// textAreaInferior.setText(alumno.getDni() + "      "
		// + alumno.getNombre() + "      " + alumno.getPoblacion()
		// + "      " + alumno.getTelefono() + "      "
		// + alumno.getFechaAux() + "      " + alumno.getCarrera());
		// }
		else {
			label.setText("El alumno No Existe :D ");
		}
	}

	/**
	 * Metodo para mostrar los alumnos de la misma carrera en la pantalla
	 * inferior
	 * 
	 * @param textAreaInferior
	 *            pantalla donde se escribiran los datos de los alumno
	 * @param alumno
	 *            alumno el cual se mostrara por pantalla
	 */
	public void mostrarAlumnosPorCarrera(DefaultListModel modeloLista,
			Alumno alumno) {
		if (alumno != null) {
			modeloLista.addElement(alumno);
			// textAreaInferior.setText(textAreaInferior.getText()
			// + alumno.getDni() + "      " + alumno.getNombre()
			// + "      " + alumno.getPoblacion() + "      "
			// + alumno.getTelefono() + "      " + alumno.getFechaAux()
			// + "      " + alumno.getCarrera()+"\n");
		} else {
			// textAreaInferior.setText("El alumno No Existe :D ");
		}
	}
	/**
	 * Metodo para comprobar que el dni sea correcto
	 * @return devuelve true si la letra coincide con los numeros, false en cualquier caso contrario
	 */
	public boolean comprobarDni() {
		
		String dni = ventana.getTexto1().getText();
		
		if (dni.length() == 9) {
			char letra = (char) dni.charAt(8);
			int numeros = Integer.parseInt((dni.substring(0, 8)));
			int resultado = numeros % 23;
			
			char result = ' ';
			char result2 = ' ';
			switch (resultado) {
			case 0:
				result = 'T';
				result2 = 't';
				break;
			case 1:
				result = 'R';
				result2 = 'r';
				break;
			case 2:
				result = 'W';
				result2 = 'w';
				break;
			case 3:
				result = 'A';
				result2 = 'a';
				break;
			case 4:
				result = 'G';
				result2 = 'g';
				break;
			case 5:
				result = 'M';
				result2 = 'm';
				break;
			case 6:
				result = 'Y';
				result2 = 'y';
				break;
			case 7:
				result = 'F';
				result2 = 'f';
				break;
			case 8:
				result = 'P';
				result2 = 'p';
				break;
			case 9:
				result = 'D';
				result2 = 'd';
				break;
			case 10:
				result = 'X';
				result2 = 'x';
				break;
			case 11:
				result = 'B';
				result2 = 'b';
				break;
			case 12:
				result = 'N';
				result2 = 'n';
				break;
			case 13:
				result = 'J';
				result2 = 't';
				break;
			case 14:
				result = 'Z';
				result2 = 'z';
				break;
			case 15:
				result = 'S';
				result2 = 's';
				break;
			case 16:
				result = 'Q';
				result2 = 'q';
				break;
			case 17:
				result = 'V';
				result2 = 'v';
				break;
			case 18:
				result = 'H';
				result2 = 'h';
				break;
			case 19:
				result = 'L';
				result2 = 'l';
				break;
			case 20:
				result = 'C';
				result2 = 'c';
				break;
			case 21:
				result = 'K';
				result2 = 'k';
				break;
			case 22:
				result = 'E';
				result2 = 'e';
				break;
			default:

				return false;
			}
			if (letra == result || letra == result2) {

				return true;
			}else{
				return false;
			}
		} else {
			return false;
		}
	}

}
